A traditional computing device directly connects a volatile memory component, such as dynamic random access memory (DRAM), to a memory bus; however, persistent storage devices, including disk and flash, are connected to a slow, low bandwidth input/output (I/O) bus. To achieve acceptable performance, a file system aggressively buffers data in the DRAM at the risk of data loss or file system corruption in the event of a failure (e.g., system crash or power loss). The file system, which may be a part of an operating system, includes responsibility for managing the data on the non-volatile memory.
In an implementation, the file system in the computing device may provide consistency guarantees, temporal safety guarantees, correctness, and performance for data and data accesses stored on a device. The consistency implemented by the file system assures that data stored on a disk has not been corrupted, so that the data may describe a valid file system. The temporal safety may limit an amount of time that the data—once written by an application—resides in the volatile memory before being transferred to the non-volatile memory. In other words, the temporal safety (guarantee) defines the time between a write issued by an application, and the write becoming persistent. The application may include a program designed to perform a specific task such as reading or writing data. The correctness describes whether writes are reflected to persistent storage after the writes were issued by the application. The consistency, the correctness, and the temporal safety may be sacrificed to a certain degree, in order to overcome performance limitations of the persistent storage.